定期ミートアップ 第71回
./buintinからpackages/coreに移行
package.json5 : パッケージ定義
rust_libs: ディレクトリをcargo buildし、できた.aをリンク
このあたり少しだけ移行できないものがありそう(クラス階層のブートストラップ部分)
環境変数を追加した
SHIIKA_ROOT: packages/coreがある場所を指定(eg. git cloneした場所)
SHIIKA_WORK: 中間生成物置き場(eg. ~/.shiika)
VTable周りの実装
HIR: MethodCallをDirect, Virtual, Moduleに分類
MIR: MethodCallは(FuncRef / VTableRef / WTableRef) + FunCallで表現
Penの話
数値を (number型, 123) みたいな表現でもてば、これは number | string | null や number | string の値として使うことができる(両方を移行するときに変換が要らない)
もし(number | string | null, 123)のような持ち方をしていると変換が要る
こいつらがリストの要素だったときとかに大変
(型ID, 値) とする場合、型IDが被らないように気をつけないといけない
分割コンパイルがある場合どうする?
型のメタ情報を実行時にもつので、それのアドレスとIDをしている
※LLVMの最適化で構造体がまとめられてしまうケースに注意
これをしないフラグがあるらしい
Shiika: クラスオブジェクトのメモリアドレスをIDとしている
実行時まで決まらないのがネック
TODO: GCされることはないのか?
別の案:リリースモード